#include <head.h>
/*
使用flock实现文件锁
    #include <sys/file.h>
    
    功能：
        对文件描述符'fd'对应的文件加锁或解锁
    参数：
        @fd：文件描述符
        @operation：操作类型，可以是以下值之一：
            -'LOCK_SH':共享锁。允许多个进程同事持此锁所进行读取操作，但不允许任何进程进行写操作            
            -'LOCK_EX':排他锁。只有一个进程可以持有此锁进行写操作，且不允许其他进程读取或写入
            -'LOCK_UN':解锁，释放之前持有的锁
            -'LOCK_NB':非阻塞模式。如果锁不可用，函数会立即返回而不会阻塞进程。如果与LOCK_SH或LOCK_EX一起使用，可以避免阻塞操作
    返回值：
        成功： 返回0
        失败： 返回-1，并设置相应的错误码

应用场景
    日志文件写入：确保多个进程不会同时写入同一个日志文件，避免内容冲突。
    数据库文件访问：保证多进程同时访问数据库文件时的数据一致性。
    并发文件操作控制：避免多个进程同时修改配置文件或共享资源。
*/

int main(int argc,const char *argv[])
{
    int fd = open("example.txt",O_RDWR | O_CREAT,0644);
    if(fd==-1)
    {
        perror("Error locking file");
        close(fd);
        return 1;
    }

    //尝试获取排它锁
    if(flock(fd,LOCK_EX | LOCK_NB)==-1)
    {
        perror("Error locking file");
        close(fd);
        return 1;
    }

    //执行文件操作
    write(fd,"This is a test\n",15);

    //释放锁
    flock(fd,LOCK_UN);

    close(fd);
    return 0;
}